# -*- coding: utf-8 -*-
# @author: wch
# @file: sobel.py
# @time: 2023/3/2 14:18
"""
Sobel 算子
    计算横向、竖向，再相加


sharr 算子
        与sobel类似，
        sharr只支持3*3的核，Scharr只能求x方向或y方向的边缘
        Scharr（src,ddepth,dx,dy,

拉普拉斯算子
    可以同时求两个方向的边缘
    对噪音敏感，一般需要先进行去噪在进行拉普拉斯
    Laplacian(img,ddepth,ksize =1,

边缘检测Canny
    原理：1、使用5*5高斯滤波消除噪音
        2、计算图像梯度的方向（0/45/90/135)
        3、取局部极大值
        4、阈值计算
    API:Canny（img,minVal,maxVal,......)


"""
import numpy as np
import cv2
img = cv2.imread("./media/dog.jpeg")

# # 索贝尔算子y方向边
# d1  =cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
# # 索贝尔算子x方向边
# d2 = cv2.Sobel(img,cv2.CV_64F,0,1,ksize =5)
# # dst = d1+d2
# dst =cv2.add(d1,d2)
# cv2.imshow("d1",d1)
# cv2.imshow("d2",d2)
# cv2.imshow("img",img)
# cv2.imshow("dst",dst)
# cv2.waitKey(0)


# sharr

# 拉普拉斯 Laplacian(img
# ldst =cv2.Laplacian(img,cv2.CV_64F,ksize=5)
# cv2.imshow("img",img)
# cv2.imshow("ldst",ldst)
# cv2.waitKey(0)

# Canny()
img = cv2.imread("./media/dog.jpeg")
dst = cv2.Canny(img, 100, 200)
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey(0)
